发起WebSocket握手请求,并将连接升级为WebSocket。
function swoole_http_client->upgrade(string $path, callable $callback);
- $path URL路径
- $callback 握手成功或失败后回调此函数
- 使用
Upgrade
方法必须设置onMessage
回调函数
$cli = new swoole_http_client('127.0.0.1', 9501);
$cli->on('message', function ($_cli, $frame) {
var_dump($frame);
});
$cli->upgrade('/', function ($cli) {
echo $cli->body;
$cli->push("hello world");
});
function onMessage(swoole_http_client $client, swoole_websocket_frame $frame);
- $client 客户端对象,可调用
push
方法向服务器发送数据 - $frame WebSocket数据帧,可参考 swoole_websocket_server->onMessage
某些WebSocket
服务器对于客户端要求非常严格,Client
需要非常接近Chrome
等浏览器才可以握手成功。
可以通过增加参数和Http
头,尽可能地让Client
与Chrome
等浏览器行为保持一致。
$client->set([
'websocket_mask' => true,
'ssl_host_name' => 'www.yourdomain.com',
]);
$client->setHeaders([
'Host' => 'www.yourdomain.com',
'UserAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
]);
websocket_mask
启用数据掩码,浏览器总是对数据进行掩码处理,因为存在较多性能消耗,默认未开启ssl_host_name
设置openssl
域名,SSL
握手时可能会验证此参数Host
设置Http
的Host
头,某些服务器会验证此项信息